home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Opus5.5 / ARexx.lha / ARexx / Virus_Checker7.dopus5 < prev    next >
Text File  |  1996-06-13  |  6KB  |  170 lines

  1. /* Virus_Checker7 for Directory Opus 5.5 and Virus_Checker 7 or 8.
  2.    by Leo 'Nudel' Davidson for Gods'Gift Utilities
  3.    email: leo.davidson@keble.oxford.ac.uk  www: http://users.ox.ac.uk/~kebl0364
  4.  
  5. $VER: Virus_Checker7 1.4 (7.1.96)
  6.  
  7.    NOTE: Also works with Virus_Checker 8.4 as well as the old Virus_Checker 7.
  8.  
  9.    If you include the path of a file/dir on the command line, using a {}, only
  10.    this file/dir will be tested. If you omit the {}, the program will check
  11.    all selected files and directories in the SOURCE lister for viruses.
  12.  
  13.    If Virus_Checker's ARexx port is not found, the program will be run for
  14.    you (you should edit the path below). This means the script may fail if
  15.    you give an incorrect path to the Virus_Checker program.
  16.  
  17.    If the Virus_Checker's ARexx port takes over a minute to appear, an error
  18.    requester will appear on the DOpus screen and the script will quit.
  19.  
  20.    If Virus_Checker was running to start with, it will be left running after
  21.    the script has completed. Otherwise, it will be removed from memory.
  22.  
  23.    When a virus is detected a beep will sound and once all files have been
  24.    checked you will get a requester with a list of infected files (including
  25.    the type of virus). It is possible that the requester will fail to
  26.    appear if it becomes too large to fit on the screen. The script will
  27.    detect when this happens and output the results to a shell window instead.
  28.  
  29.    Thanks to John Veldthuis <johnv@tower.actrix.gen.nz> for writting
  30.    Virus_Checker, allowing me access to the VC7/8 beta versions, and for giving
  31.    me a virus-infected file (!) to test this script with.
  32.  
  33. For a "check selected files for viruses" function, call as:
  34. ------------------------------------------------------------------------------
  35. ARexx        DOpus5:ARexx/Virus_Checker7.dopus5 {Qp} {Ql}
  36. ------------------------------------------------------------------------------
  37. Turn off all switches.
  38.  
  39.  
  40. For an "Un-LhA to a directory and check for viruses" function, call as:
  41. ------------------------------------------------------------------------------
  42. AmigaDOS    C:LHA -M x {fu} {d}{ou-}/
  43. ARexx        DOpus5:ARexx/Virus_Checker7.dopus5 {Qp} {Ql} {d}{o-}
  44. ------------------------------------------------------------------------------
  45. Switches: Do all files
  46.           Output to window
  47.           Rescan dest
  48.           Window close button
  49.  
  50. //- Path to Virus_Checker command ------------------------------------------*/
  51. Virus_Checker = "DH0:Tools/Virus/Virus_Checker"
  52. /*--------------------------------------------------------------------------*/
  53. options results
  54. options failat 99
  55. signal on syntax;signal on ioerr        /* Error trapping */
  56. parse arg DOpusPort source_handle.0 FilePath
  57. DOpusPort = Strip(DOpusPort,"B",'" ')
  58. source_handle.0 = Strip(source_handle.0,"B",'" ')
  59. /* Important: FilePath must be stripped as below incase there is a space at
  60.               the beginning or end of the filename */
  61. FilePath = Strip(Strip(FilePath,"B",' '),"B",'"')
  62.  
  63. If DOpusPort="" THEN Do
  64.     Say "Not correctly called from Directory Opus 5!"
  65.     Say "Load this ARexx script into an editor for more info."
  66.     EXIT
  67.     END
  68. If ~Show("P",DOpusPort) Then Do
  69.     Say DOpusPort "is not a valid port."
  70.     EXIT
  71.     End
  72. Address value DOpusPort
  73.  
  74. dopus version
  75. If ( result='RESULT' | translate(result,'.',' ') < 5.1218 ) then do
  76.     dopus request '"This script requires DOpus v5.5 or greater." OK'
  77.     EXIT
  78.     end
  79.  
  80. Quit_After = "NO"
  81. If ~Show("P","Virus_Checker") Then Do
  82.     Address Command Virus_Checker
  83.     Address Command "WaitForPort Virus_Checker"
  84.     Quit_After = "YES"
  85.     If ~Show("P","Virus_Checker") then do
  86.         lister request source_handle.0 '"Error loading Virus_Checker!'|| '0a'x ||'Check its command-path in the ARexx script." OK'
  87.         EXIT
  88.         END
  89.     END
  90.  
  91. /* If file/dir-path was specified on command line, check it, else
  92.    go through all the selected ones. */
  93.  
  94. BadList = ""
  95. BadNumber = 0
  96.  
  97. If FilePath = "" Then Do
  98.     lister set source_handle.0 busy 1
  99.  
  100.     lister query source_handle.0 numselentries    /* Get info about selected */
  101.     Lister_NumSelEnt = RESULT            /* entries & path to them */
  102.     lister query source_handle.0 path
  103.     Lister_Path = Strip(RESULT,"B",'"')
  104.  
  105.     lister set source_handle.0 progress Lister_NumSelEnt "Checking for viruses..."
  106.  
  107.     Do i=1 to Lister_NumSelEnt
  108.         lister query source_handle.0 abort
  109.         If RESULT=1 Then BREAK
  110.         lister query source_handle.0 firstsel
  111.         Temp_Name = Strip(RESULT,"B",'"')
  112.         lister select source_handle.0 '"'||Temp_Name||'"' 0
  113.         Temp_Path = Lister_Path || Temp_Name
  114.         lister set source_handle.0 progress name Temp_Name
  115.         lister set source_handle.0 progress count i
  116.         Address "Virus_Checker" "Scan "||Temp_Path
  117.         If VCHECK.0.0 ~= 0 Then Do
  118.             command beep
  119.             Do x=1 to VCHECK.0.0
  120.                 BadNumber = BadNumber + 1
  121.                 BadList = BadList || '0a'x || VCHECK.x.1 ||"  (" || VCHECK.x.2 || ")"
  122.                 END
  123.             END
  124.         END
  125.     lister clear source_handle.0 progress
  126.     End
  127.  
  128. ELSE Do
  129.     lister set source_handle.0 progress "-1" "Checking for viruses..."
  130.     Address "Virus_Checker" "Scan "||FilePath
  131.     If VCHECK.0.0 ~= 0 Then Do
  132.         command beep
  133.         Do x=1 to VCHECK.0.0
  134.             BadNumber = BadNumber + 1
  135.             BadList = BadList || '0a'x || VCHECK.x.1 ||"  (" || VCHECK.x.2 || ")"
  136.             END
  137.         END
  138.     lister clear source_handle.0 progress
  139.     End
  140.  
  141. If BadNumber > 0 Then Do
  142.     If BadNumber = 1 Then
  143.         BadNote = "The following file is infected: ›0m(Virus name in parenthesis)"
  144.     Else
  145.         BadNote = "The following files are infected: ›0m(Virus names in parenthesis)"
  146.     BadList = "›0;41;30m *VIRUS WARNING* ›0m" || '0a'x || "›1m" || BadNote || '0a'x || BadList
  147.     dopus front
  148.     dopus screen
  149.     doscr = RESULT ; dosname=Word(doscr,"1") ; dosbar=Word(doscr,"5")+1 ; doswidth=Word(doscr,"2") ; dosheight=Word(doscr,"3")-dosbar
  150.     Open(Output_Shell,"CON:0/"|| dosbar ||"/"|| doswidth ||"/"|| dosheight ||"/Virus Warning/CLOSE/WAIT/SCREEN"|| dosname,"W")
  151.     WriteLN(Output_Shell,BadList)
  152.     command wait alarm
  153.     Close(Output_Shell)
  154.     END
  155.  
  156. /*-- Restore the Lister for normal use --------------------------------------*/
  157. syntax:;ioerr:                /* In case of error, jump here */
  158. END_PART_2:
  159.  
  160. lister clear source_handle.0 progress
  161.  
  162. If FilePath = "" Then Do
  163.     lister refresh source_handle.0
  164.     lister set source_handle.0 busy 0
  165.     END
  166.  
  167. END_PART:
  168. If Quit_After = "YES" Then Address "Virus_Checker" QUIT
  169. EXIT
  170.